Electronic circuits, such as integrated circuits, are used in a variety of products, from automobiles to microwaves to personal computers. Some integrated circuits are designed and manufactured to have a specific set of features, or be used for a specific purpose. These types of integrated circuits are often referred to as application-specific integrated circuits (ASICs). Other types of integrated circuits are designed and manufactured to be customizable after the integrated circuit has been manufactured. These types of integrated circuits are often referred to as programmable integrated circuits.
Designing and customizing programmable integrated circuits involves many steps. Although these steps may often take place after the programmable integrated circuit has been manufactured, they are still typically thought of as the “design flow.” Several steps are common to most design flows. Initially, the specification for a new programmable integrated circuit is transformed into a logical design, sometimes referred to as a register transfer level (RTL) description of the circuit. With this logical design, the circuit is described in terms of both the exchange of signals between hardware registers and the logical operations that are performed on those signals. The logical design typically employs a Hardware Design Language (HDL), such as the Very high speed integrated circuit Hardware Design Language (VHDL). The logic of the circuit is then analyzed, to confirm that it will accurately perform the functions desired for the circuit, i.e. that the logical design conforms to the specification.
Logical designs are often verified using a simulation of the logical design. As those of ordinary skill in the art will appreciate, a logical design may be simulated. Subsequently, inputs may be applied to the logical design and outputs may be received from the logical design, via the simulation. Specific tests, that is, a selected set of inputs, having a corresponding set of expected outputs, are typically applied to the logical design in order to ensure that the functionality of the logical design matches the functionality required by the design specification. The functionality described by the specification is often referred to as the “intended functionality.”
The simulated outputs (i.e. those outputs resulting from applying the test inputs to the logical design during simulation) can then be compared to the expected outputs. Any discrepancies in the simulated outputs and the expected outputs may then be investigated by a designer and appropriate changes to the logical design made. This ensures that the logical design performs the intended functionality. This type of verification is occasionally referred to as “functional verification,” as it seeks to verify the intended functionality of the logical design.
After the logical design is verified, it is converted (i.e. synthesized) into a programmable design. The programmable design will be used to configure the programmable integrated circuit, such that the intended functionality may be realized. As mentioned above, functional verification is often used to ensure that a logical design behaves as intended. However, this only ensures that the logical designs functionality matches the intended functionality. Functional verification does not ensure that errors will not be made during the process of synthesizing a programmable design from the logical design, or during the actual programming of the programmable integrated circuit.
In some industries, such as, for example, aviation, military, and aerospace, specific standards relating to verification exists. These types of standards are often referred to as “safety standards.” Safety standards typically require that the same functional verification tests performed on the logical design also be performed on the programmable integrated circuit once it has been configured. Currently, this is accomplished through the use of custom testing hardware, onto which the programmable integrated circuit is mounted. The custom testing hardware, often referred to as a “test board,” is then connected to a computer and the programmable integrated circuit is tested via the test board. However, these custom test boards are typically designed for a specific programmable integrated circuit. In extreme cases, a different test board will be required for each configuration of a programmable integrated circuit. Test boards often cost more than $30,000 each. In addition to the cost of each board, designing, creating, and maintaining a board requires additional resources that add to the cost and time required to design and bring to market a design using a programmable integrated circuit.
These additional costs and resource requirements can be especially burdensome in applications where only a relatively small number of integrated circuits will ever be manufactured from the design, such as, for example, integrated circuits manufactured for the aviation industry.